In addition to a central processing unit (CPU), a computer system may in some cases utilize a coprocessor for performing additional functions. For example, a coprocessor may be used to perform such operations as floating point arithmetic, graphics operations, signal processing, string processing, encryption, compression, and interfacing with peripheral devices. Coprocessors may thus be optimized for performing specific types of calculations efficiently, and may increase overall system performance by offloading processor-intensive tasks from the CPU.
A coprocessor may be used to process a heterogeneous workload that may include several different types of computations, each having its own unique set of computational requirements, such as data size or processing time. A typical architecture may execute such heterogeneous workloads by relying on software management to execute multiple workloads sequentially using a single or multiple hardware engines. However, the different computational requirements presented by a heterogeneous workload may make it difficult to execute using such a system; different computational (data) sizes or computational time may add significant complexity as compared to homogeneous workloads.